﻿Imports System.Data  
Imports System.Collections.ObjectModel    

Class CMLoadInstrument

    Private lstRegistrosLI     As new ObservableCollection(Of CTLoadInstrument)
    Private dtCorporativo      As new DataTable 
    Private dtGubernamental    As new DataTable 
    Private dtBancario         As new DataTable 
    Private dtNotas            As new DataTable 
    Private dtVectorValmer     As new DataTable 
    Private dtPosiciones       As new DataTable 


    private negocio As New CLoadInstrumentServicio ()

    Public Sub New()                
        InitializeComponent()

        Dim servicioGral As New CServiciosGenerales 
        Me.dtpFecha.DisplayDate = servicioGral.ObtenerFechaActual ()
        Me.dtpFecha.Text = Me.dtpFecha.DisplayDate



        Dim sMsgError As String = ""
        Dim idError   As Integer 
         
        dtPosiciones  = negocio.ObtenerPosicionesArchValmer (sMsgError)
        If Not sMsgError.Equals("") then         
            idError = CUtileria.GrabarBitacora ("LoadInstrument","ObtenerPosiciones","VectorValmer: " & sMsgError ) 
            CUtileria.CompletarRegBitacora (idError)       
        End If


        Mouse.OverrideCursor = Nothing        
                    
    End Sub
  
    #Region "COMPLEMENTATIO PARA EL GRID"

  Private sub LimpiarValorVisualDelRegistro(ByVal indexReg As Integer)

    Dim cellContent As Object
    Dim rowData     as DataGridRow    
    Dim i As Integer 

    rowData  = Me.grdDatosLI.ItemContainerGenerator.ContainerFromIndex(indexReg)                                                                

    For i = 0 to  Me.grdDatosLI.Columns.Count - 1
        cellContent   = Me.grdDatosLI.Columns(i).GetCellContent(rowData)    
        cellContent.text = ""
    Next
               
    Me.grdDatosLI.UpdateLayout ()

  End Sub

  Private Sub grdDatosLI_MouseRightButtonUp(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles grdDatosLI.MouseRightButtonUp

        Dim objDepend As DependencyObject = e.OriginalSource
        Dim celda As DataGridCell = Nothing

        Dim iReg As Integer = -1

        Me.grdDatosLI.ContextMenu = Nothing
        While Not objDepend Is Nothing

            If objDepend.GetType().Name = "DataGridCell" Then
                celda = objDepend

                If celda.IsSelected = False Then
                    Me.grdDatosLI.UnselectAllCells()
                End If

                celda.Focus()
                celda.IsSelected = True

                Dim col As Integer = Me.grdDatosLI.CurrentCell.Column.DisplayIndex

                If col = 0 Then
                    Me.grdDatosLI.ContextMenu = AgregarMenuContextual()
                End If

                Exit While
            End If

            objDepend = VisualTreeHelper.GetParent(objDepend)

        End While




    End Sub


#End Region

    #Region "MENU CONTEXTUAL"



    Private Function AgregarMenuContextual() As ContextMenu
        Dim miMenuContextual As New ContextMenu

        Dim mnuEliminar             As new System.Windows.Controls.MenuItem 
        Dim mnuAgregar              As new System.Windows.Controls.MenuItem
        Dim mnuPegar                As New System.Windows.Controls.MenuItem



        mnuEliminar.Header = "Eliminar registro(s)"
        miMenuContextual.Items.Add(mnuEliminar)
        AddHandler mnuEliminar.Click,AddressOf  mnuEliminarReg_click


        mnuAgregar.Header = "Agregar registro"  
        miMenuContextual.Items.Add(mnuAgregar)
        AddHandler mnuAgregar.Click,AddressOf  mnuAgregarReg_click


        mnuPegar.Header = "Pegar"
        miMenuContextual.Items.Add(mnuPegar)
        AddHandler mnuPegar.Click, AddressOf mnuPegar_click

        Return miMenuContextual

    End Function

    Public Sub mnuEliminarReg_click()
  
        Try
            BorraRegistrosSeleccionados(Me.grdDatosLI)
        Catch ex As Exception
            MessageBox.Show("Error TI500. Error al intentar eliminar los registros seleccionados: " & ex.Message, "LoadInstrument", MessageBoxButton.OK, MessageBoxImage.Error)
        End Try
  
    End Sub

    Public Sub mnuAgregarReg_click()
         Try
           AgregarRegistroInstrumento ()
         Catch ex As Exception
           MessageBox.Show("Error TI500. " & ex.Message, "Insertar registro", MessageBoxButton.OK, MessageBoxImage.Exclamation)
         End Try            
    End Sub  

    Private Sub BorraRegistrosSeleccionados(ByRef gridDeDatos As DataGrid) 
    
    Dim lstAux As New List(Of CTLoadInstrument )
    Dim rowAux As Integer = -1
    
    Try
          For each celda As DataGridCellInfo in gridDeDatos.SelectedCells            
              Dim col As Integer = celda.Column.DisplayIndex   
              Dim row As Integer = gridDeDatos.Items.IndexOf  (CType(celda.Item,CTLoadInstrument))
               
              If row <> rowAux then 
                 rowAux = row 
                 lstAux.Add (lstRegistrosLI(row))
              End If                                              
           Next
    
           For Each registro As CTLoadInstrument  In lstAux 
                lstRegistrosLI.Remove(registro)                
           Next              
    
           gridDeDatos.ItemsSource = lstRegistrosLI 
           gridDeDatos.Items.Refresh () 
    
    Catch ex As Exception
        Throw ex    
    End Try


End Sub

    Private Sub mnuPegar_click(ByVal sender As Object, ByVal e As RoutedEventArgs)
        Try
            Mouse.OverrideCursor = Cursors.Wait
            pegarDatosLI(Me.grdDatosLI)
            Mouse.OverrideCursor = Nothing
        Catch ex As Exception
            Mouse.OverrideCursor = Nothing
            MessageBox.Show("Error TI500. " & ex.Message, "Pegar celdas", MessageBoxButton.OK, MessageBoxImage.Exclamation)
        End Try
    End Sub

    Private Sub pegarDatosLI(ByRef gridDeDatos As DataGrid)
  

        Dim datos As CDatosEnFormatoX

        datos = CUtileria.ObtenerDatosClipboard(vblf, vbTab)

        '1) Validaciones: obtener información del portapapeles

        If datos.Datos.length = 0 Then
            Exit Sub
        End If


        If datos Is Nothing Then
            MessageBox.Show("No se pudo copiar los datos")
            gridDeDatos.CancelEdit(DataGridEditingUnit.Cell)
            Exit Sub
        End If

        '2) Validaciones: compatibilidad  

        Dim colTot As Integer = 1   'Solo se considera el número de columnas editables   
        Dim rowTot As Integer = gridDeDatos.Items.Count


        Dim colActual As Integer 
        Dim rowActual As Integer 
       
        colActual = 0        
        rowActual = gridDeDatos.Items.IndexOf(CType(gridDeDatos.SelectedCells.First.Item, CTLoadInstrument))
        


        'Validar renglones

        If datos.NumeroRenglones > ((rowTot - (rowActual + 1)) + 1) Then
            MessageBox.Show("No coinciden las dimensiones de datos a pegar (R)")
            gridDeDatos.CancelEdit(DataGridEditingUnit.Cell)
            Exit Sub
        End If

        If datos.NumeroColumnas.Max > ((colTot - (colActual + 1)) + 1) Then
            MessageBox.Show("No coinciden las dimensiones de datos a pegar (C)")
            gridDeDatos.CancelEdit(DataGridEditingUnit.Cell)
            Exit Sub
        End If

        '2) Realizar copiado  

        Dim i As Integer = 0


        Dim coontador As Integer = 0

        Dim limRow As Integer = (rowActual + (datos.NumeroRenglones - 1))
        Dim limCol As Integer = (colActual + (datos.NumeroColumnas.Max - 1))


        gridDeDatos.UnselectAllCells()


        Try


            Dim j As Integer = 0
            For i = rowActual To limRow

                Dim row As DataGridRow = gridDeDatos.ItemContainerGenerator.ContainerFromIndex(i)

                For j = colActual To limCol
                    If datos.Datos(i - rowActual)(j - colActual) <> vbLf And (Not CType(datos.Datos(i - rowActual)(j - colActual), String).Trim().Equals("")) Then
                        Dim cellContent As TextBlock = gridDeDatos.Columns(j).GetCellContent(row)
                        lstRegistrosLI(i).P_0_instrument = datos.Datos(i - rowActual)(j - colActual).ToString.Trim()
                        cellContent.Text = datos.Datos(i - rowActual)(j - colActual).ToString.Trim()
                    End If
                Next


                Try
                    negocio.AplicarReglasNegocio(Me.dtpFecha.DisplayDate, lstRegistrosLI(i), dtCorporativo, dtGubernamental, dtBancario, dtNotas, dtVectorValmer,dtPosiciones )
                Catch ex As Exception
                    LimpiarValorVisualDelRegistro(i)
                    lstRegistrosLI(i).limpiarValores()

                    If ex.Message.IndexOf("TO500") >= 0 then 
                       MessageBox.Show( ex.Message, "Carga valores LoadInstrument", MessageBoxButton.OK, MessageBoxImage.Warning)
                    else
                        MessageBox.Show("Error TI500. Ocurrió un error: " & ex.Message & ".", "Carga valores LoadInstrument", MessageBoxButton.OK, MessageBoxImage.Error)
                    End If
                    
                    Exit Sub
                End Try


                ActualizarVisualizacionCampos(row, i)

            Next

      

        Catch ex As Exception

            gridDeDatos.Items.Refresh()
            Throw New Exception("No se pudo terminar de copiar los datos debido a que no coinciden con el formato especificado para cada celda", ex)

        End Try


    End Sub



#End Region

    #Region "REGLAS"

    Private Sub ActualizarVisualizacionCampos(ByRef rowData As DataGridRow, ByVal reg As Integer)


        Dim cellCampo As TextBlock

        '1) Tipo                    
        cellCampo = Me.grdDatosLI.Columns(1).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_1_tipo

        '2) Emision
        cellCampo = Me.grdDatosLI.Columns(2).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_2_emision

        '6) Tv
        cellCampo = Me.grdDatosLI.Columns(6).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_6_tv

        '7) Rendimiento
        cellCampo = Me.grdDatosLI.Columns(7).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_7_rendimiento


        'Emisora (8)

        cellCampo = Me.grdDatosLI.Columns(8).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_8_emisora


        'Tipo de Instrumento (9)

        cellCampo = Me.grdDatosLI.Columns(9).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_9_tipoinstrumento

        'Cupones por vencer (11)

        cellCampo = Me.grdDatosLI.Columns(11).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_11_cuponesporvencer


        'Cupones vencidos (12)

        cellCampo = Me.grdDatosLI.Columns(12).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_12_cuponevencidos


        'Periodo de Cupon (13)

        cellCampo = Me.grdDatosLI.Columns(13).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_13_periododecupo_1


        'Sobretasa de Mercado (15)

        cellCampo = Me.grdDatosLI.Columns(15).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_15_sobretasademercado

        'SobretasaTotal (16)

        cellCampo = Me.grdDatosLI.Columns(16).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_16_sobretasatotal


        'Tasa Cupon (17)

        cellCampo = Me.grdDatosLI.Columns(17).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_17_tasacupon_1


        'Fecha de Colocacion (19)

        cellCampo = Me.grdDatosLI.Columns(19).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_19_fechadecolocacion


        'Fecha de Vencimiento (20)

        cellCampo = Me.grdDatosLI.Columns(20).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_20_fechadevencimiento


        'Dias por Vencer (21)

        cellCampo = Me.grdDatosLI.Columns(21).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_21_diasporvencer


        'Precio Sucio MD (22)

        cellCampo = Me.grdDatosLI.Columns(22).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_22_preciosuciomd_1


        'Precio Limpio MD (24)

        cellCampo = Me.grdDatosLI.Columns(24).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_24_preciolimpiomd


        'PrecioSucio24Hrs(25)

        cellCampo = Me.grdDatosLI.Columns(25).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_25_sucio24hrs


        'Duracion Ajustada.(26)

        cellCampo = Me.grdDatosLI.Columns(26).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_26_duracionajustada


        'Convexidad(27)

        cellCampo = Me.grdDatosLI.Columns(27).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_27_convexidad


        'Valor Nominal Actualizado(28)

        cellCampo = Me.grdDatosLI.Columns(28).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_28_valornominalactualizado

        'Redemption Price (29)


        cellCampo = Me.grdDatosLI.Columns(29).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_29_redemptionprice

        'Valores Inscritos(30)

        cellCampo = Me.grdDatosLI.Columns(30).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_30_valoresinscritos


        'Monto enCirculacion (31)

        cellCampo = Me.grdDatosLI.Columns(31).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_31_montoencirculacion


        'Isin (32)

        cellCampo = Me.grdDatosLI.Columns(32).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_32_isin_1


        'Isin (33)

        cellCampo = Me.grdDatosLI.Columns(33).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_33_isin_2



        'Isin (34)

        cellCampo = Me.grdDatosLI.Columns(34).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_34_isin_3


        'Curva de Descuento (35)

        cellCampo = Me.grdDatosLI.Columns(35).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_35_curvadedescuento


        'Inicio de Cupon (38)

        cellCampo = Me.grdDatosLI.Columns(38).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_38_iniciodecupon


        'Fin de Cupon (39)

        cellCampo = Me.grdDatosLI.Columns(39).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_39_findecupon

        'FITCH (40)

        cellCampo = Me.grdDatosLI.Columns(40).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_40_fitch


        'S&P (41)


        cellCampo = Me.grdDatosLI.Columns(41).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_41_syp

        'Moodys (42)

        cellCampo = Me.grdDatosLI.Columns(42).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_42_moodys


        'Sobretasa En Decalog (43)

        cellCampo = Me.grdDatosLI.Columns(43).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_43_sobretasaendecalog


        'Sobretasa de colocacion (44)

        cellCampo = Me.grdDatosLI.Columns(44).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_44_sobretasadecolocacion


        'ISR (45)

        cellCampo = Me.grdDatosLI.Columns(45).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_45_isr

        'Serie (47)


        cellCampo = Me.grdDatosLI.Columns(47).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_47_serie

        'Dias por Vencer (53)

        cellCampo = Me.grdDatosLI.Columns(53).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_53_diasporvencer


        'FECHA EMISIÓN (54)

        cellCampo = Me.grdDatosLI.Columns(54).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_54_fechaemision


        'FECHA VENCIMIENTO (55)

        cellCampo = Me.grdDatosLI.Columns(55).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_55_fechavencimiento


        'F. INICIO CUPON (56)

        cellCampo = Me.grdDatosLI.Columns(56).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_56_finicicupon


        'F. FINAL CUPON (57)

        cellCampo = Me.grdDatosLI.Columns(57).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_57_ffinalcupon


        'PRECIO SUCIO MD (58)

        cellCampo = Me.grdDatosLI.Columns(58).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_58_preciosuciomd


        'PRECIO LIMPIO MD (59)

        cellCampo = Me.grdDatosLI.Columns(59).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_59_preciolimpiomd

        'VALOR NOMINAL (60)

        cellCampo = Me.grdDatosLI.Columns(60).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_60_valornominal


        'TÍTULOS DE LA EMISIÓN (61)


        cellCampo = Me.grdDatosLI.Columns(61).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_61_titulosdelemision


        'MONTO DE LA EMISIÓN (62)


        cellCampo = Me.grdDatosLI.Columns(62).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_62_montodelaemision

        'Tasa Cupón (63)

        cellCampo = Me.grdDatosLI.Columns(63).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_63_tasacupon


        'STRIKE 1 (64)

        cellCampo = Me.grdDatosLI.Columns(64).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_64_strike1


        'STRIKE 2 (65)

        cellCampo = Me.grdDatosLI.Columns(65).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_65_strike2


        'TASA MÁXIMA (TIM) (66)

        cellCampo = Me.grdDatosLI.Columns(66).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_66_tasamaxima_tim


        'TASA MÍNIMA GARANTIZADA (TMG) (67)

        cellCampo = Me.grdDatosLI.Columns(67).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_67_tasaminimagarantizada_tmg


        'SUBYACENTE (68)

        cellCampo = Me.grdDatosLI.Columns(68).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_68_subyacente



        'ESTRUCTURA (69)

        cellCampo = Me.grdDatosLI.Columns(69).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_69_estructura


        'DÍAS POR VENCER EMISIÓN (72)              

        cellCampo = Me.grdDatosLI.Columns(72).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_72_diasporvenceremision


        'DÍAS POR VENCER EMISIÓN (73)

        cellCampo = Me.grdDatosLI.Columns(73).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_73_diasporvenceremision


        'PERIODO CUPON (74)

        cellCampo = Me.grdDatosLI.Columns(74).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_74_periodocupon


        'CUPONES POR VENCER (75)

        cellCampo = Me.grdDatosLI.Columns(75).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_75_cuponesporvencer


        'TIPO VALOR (79)

        cellCampo = Me.grdDatosLI.Columns(79).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_79_tipovalor


        'Acronimo (3)

        cellCampo = Me.grdDatosLI.Columns(3).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_3_acronimo

        'Long Name 1 (4)

        cellCampo = Me.grdDatosLI.Columns(4).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_4_longname1


        'Tipo de Instrumento (Decalog) (5) 

        cellCampo = Me.grdDatosLI.Columns(5).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_5_tipodeinstrumentodecalog


        'Fijo F, Revisable R,Descuento D (10)

        cellCampo = Me.grdDatosLI.Columns(10).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_10_fijofrevisablerdescuentod


        'Periodo de Cupon (14)

        cellCampo = Me.grdDatosLI.Columns(14).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_14_periododecupon_2

        'Tasa Cupon 2 (18) 
        cellCampo = Me.grdDatosLI.Columns(18).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_18_tasacupon_2




        'Precio Sucio MD (23)
        cellCampo = Me.grdDatosLI.Columns(23).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_23_preciosuciomd_2

        'Codigo Indice (36)

        cellCampo = Me.grdDatosLI.Columns(36).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_36_codigoindice


        'Tipo Interes (37)

        cellCampo = Me.grdDatosLI.Columns(37).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_37_tipointeres


        'GuarTyp (46)

        cellCampo = Me.grdDatosLI.Columns(46).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_46_guartyp


        'Tipo de Revision (48)
        cellCampo = Me.grdDatosLI.Columns(48).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_48_tipoderevision


        'Tipo de Revision CS (49)

        cellCampo = Me.grdDatosLI.Columns(49).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_49_tipoderevisioncs


        ' # of Days / Type (50)
        cellCampo = Me.grdDatosLI.Columns(50).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_50_numofdaystype


        'Category (51)

        cellCampo = Me.grdDatosLI.Columns(51).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_51_category


        '#Days (52)

        cellCampo = Me.grdDatosLI.Columns(52).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_52_numdays

        'CONCATENACION NOMBRE (70)

        cellCampo = Me.grdDatosLI.Columns(70).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_70_concatenacion_nombre


        'Nota en Decalog  (71)
        cellCampo = Me.grdDatosLI.Columns(71).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_71_notaendecalog


        'Cupones vencidos (76) 
        cellCampo = Me.grdDatosLI.Columns(76).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_76_cuponesvencidos

        'Periodo de Cupon (77)

        cellCampo = Me.grdDatosLI.Columns(77).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_77_periododecupon

        'Tipo Interes (78)

        cellCampo = Me.grdDatosLI.Columns(78).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_78_tipointeres

        ' TIPO DE REVISION (80)
        cellCampo = Me.grdDatosLI.Columns(80).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_80_tipoderevision

        'Codigo Indice (81)

        cellCampo = Me.grdDatosLI.Columns(81).GetCellContent(rowData)
        cellCampo.Text = lstRegistrosLI(reg).P_81_codigoindice


        grdDatosLI.UpdateLayout()





    End Sub

    Private Sub grdDatosLI_CellEditEnding(ByVal sender As System.Object , ByVal e As System.Windows.Controls.DataGridCellEditEndingEventArgs) Handles grdDatosLI.CellEditEnding

  
          Dim col         As Integer 
          Dim reg         As Integer      
          Dim rowData     as DataGridRow
          Dim cellContent As Object

          Dim instrumentoAux As new CTLoadInstrument 


   
           If e.EditAction = DataGridEditAction.Commit then
          
              If not sender.CurrentItem is Nothing then

            
                        col   =  e.Column.DisplayIndex 
                        reg   =  e.Row.GetIndex        
                     rowData  = Me.grdDatosLI.ItemContainerGenerator.ContainerFromIndex(reg)                                                                
       
       

                       cellContent   = Me.grdDatosLI.Columns(col).GetCellContent(rowData)   'contenido de la celda actual              

                       IF cellContent.text.ToString.Split ("_").Count  <> 3 then
                          LimpiarValorVisualDelRegistro(reg)
                          lstRegistrosLI(reg).limpiarValores ()  
                          Exit Sub 
                       End If

                

                      lstRegistrosLI(reg).P_0_instrument = cellContent.text 
              
                      Try
                        negocio.AplicarReglasNegocio(Me.dtpFecha.DisplayDate,lstRegistrosLI(reg), dtCorporativo,dtGubernamental,dtBancario,dtNotas,dtVectorValmer,dtPosiciones ) 
                      Catch ex As Exception
                          LimpiarValorVisualDelRegistro(reg)
                          lstRegistrosLI(reg).limpiarValores ()  
                            MessageBox.Show("Error TI500. Ocurrió un error: " & ex.Message & ". Asegurese que la información Valmer haya sido cargada correctamente.", "Carga valores LoadInstrument", MessageBoxButton.OK, MessageBoxImage.Error)
                          Exit Sub 
                      End Try
              
               
                        ActualizarVisualizacionCampos(rowData, reg)
                                                                                          
              End If



           End If



      End Sub

#End Region

    #Region "BOTONES DE COMANDO"


    Private Sub btnImpValmer_Click(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs ) Handles btnImpValmer.Click 
    
    Dim sMsgError        As String = ""
    Dim sErrores(5)      As Boolean  
    
    Dim sMensajeAux      As String= ""
    Dim sMensajeSinDatos As String= ""


    Dim idRegBitGral     As Integer     
    Dim idError          as Integer 
    



  Try

    Mouse.OverrideCursor =  Cursors.Wait  
    
    idRegBitGral = CUtileria.GrabarBitacora ("LoadInstrument","CargaValmer","Inicio del proceso") 


    dtCorporativo  = negocio.ObtenerInsCorporativo (Me.dtpFecha.SelectedDate,sMsgError)  
    If Not sMsgError.Equals("") then 
       sErrores(0) = True
       idError = CUtileria.GrabarBitacora ("LoadInstrument","CargaValmer","Corporativo: " & sMsgError ) 
       CUtileria.CompletarRegBitacora (idError)    
    End If
    

    dtGubernamental = negocio.ObtenerInsGubernamental(Me.dtpFecha.SelectedDate,sMsgError)  
    If Not sMsgError.Equals("") then 
       sErrores(1) = True
       idError = CUtileria.GrabarBitacora ("LoadInstrument","CargaValmer","Gubernamental: " & sMsgError ) 
       CUtileria.CompletarRegBitacora (idError)
    End If


    dtBancario = negocio.ObtenerInsBancario(Me.dtpFecha.SelectedDate,sMsgError)  
    If Not sMsgError.Equals("") then 
       sErrores(2) = True
       idError = CUtileria.GrabarBitacora ("LoadInstrument","CargaValmer","Bancario: " & sMsgError ) 
       CUtileria.CompletarRegBitacora (idError)
    End If

    
    dtNotas = negocio.ObtenerInsNotas(Me.dtpFecha.SelectedDate,sMsgError)  
    If Not sMsgError.Equals("") then 
       sErrores(3) = True
       idError = CUtileria.GrabarBitacora ("LoadInstrument","CargaValmer","Notas: " & sMsgError ) 
       CUtileria.CompletarRegBitacora (idError)
    End If



    dtVectorValmer = negocio.ObtenerInsVectorValmer(Me.dtpFecha.SelectedDate,sMsgError)  
    If Not sMsgError.Equals("") then 
       sErrores(4) = True
       idError = CUtileria.GrabarBitacora ("LoadInstrument","CargaValmer","VectorValmer: " & sMsgError ) 
       CUtileria.CompletarRegBitacora (idError)       
    End If
       
        
    Dim i As Integer 
    For i = 0 to 4
        If sErrores(i) = True 
            Select Case i 
                 Case 0
                     sMensajeAux = "Corporativo, "
                 Case 1
                     sMensajeAux = "Gubernamental, "
                 Case 2
                     sMensajeAux = "Bancario, "
                 Case 3
                     sMensajeAux = "Notas, "
                 Case 4
                     sMensajeAux = "Vector Valmer, "                        
            End Select
        End If        
    Next

    If not sMensajeAux.Equals("") then 
        sMensajeAux.Remove (sMensajeAux.Count - 2)
        sMensajeAux = "No se pudo cargar la información correspondiente a: " & sMensajeAux & "."
        Mouse.OverrideCursor =  Nothing 
        MessageBox.Show(sMensajeAux,"LoadInstrument: carga Valmer",MessageBoxButton.OK,MessageBoxImage.Exclamation)  
  
    else

    

        If dtCorporativo is Nothing  then 
           sMensajeSinDatos += "Corporativo"
        End If
        If dtBancario  is Nothing  then 
           sMensajeSinDatos += ", Bancario"
        End If
        If dtGubernamental is Nothing  then 
           sMensajeSinDatos += ", Gubernamental"
        End If
        If dtNotas is Nothing  then 
           sMensajeSinDatos += ", Notas"
        End If
        If dtVectorValmer  is Nothing  then 
           sMensajeSinDatos += ", Vector Valmer "
        End If

        Mouse.OverrideCursor =  Nothing

        If sMensajeSinDatos.Equals("") then 
           MessageBox.Show("Carga de información Valmer: EXITOSA","LoadInstrument: carga Valmer",MessageBoxButton.OK,MessageBoxImage.Information )  
        else
           MessageBox.Show("Es probable que los siguientes archivos no se encuentren disponibles del sitio de Valmer: " & sMensajeSinDatos & "." ,"LoadInstrument: carga Valmer",MessageBoxButton.OK,MessageBoxImage.Information )  
        End If

          
        

  End If

  Me.btnCargarDecalog.IsEnabled =True  
 
 btnAgregarInstrumento.IsEnabled = True   
 btnInsertar.IsEnabled = True  


 Catch ex As Exception
    Mouse.OverrideCursor =  Nothing 
            MessageBox.Show("Error TI500. No se pudo cargar la información de Valmer debido a: " & ex.Message, "LoadInstrument Carga Valmer", MessageBoxButton.OK, MessageBoxImage.Error)
    idError = CUtileria.GrabarBitacora ("LoadInstrument","CargaValmer",ex.Message) 
    CUtileria.CompletarRegBitacora (idError)
    CUtileria.CompletarRegBitacora (idRegBitGral)
    btnAgregarInstrumento.IsEnabled = false
    btnInsertar.IsEnabled = false

   Exit Sub 
 End Try

  CUtileria.CompletarRegBitacora (idRegBitGral)

  lstRegistrosLI.Clear ()
  Me.grdDatosLI.Items.Refresh     
  btnEliminaInstrumento.IsEnabled = False


  Mouse.OverrideCursor =  Nothing 

End Sub

    Private Sub btnCargarDecalog_Click(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs ) Handles btnCargarDecalog.Click 
Dim sMsgError as String = ""


 
 Mouse.OverrideCursor =  Cursors.Wait 

 If lstRegistrosLI.Count > 0 then 
   
     if negocio.GenerarArchivoParaDecalog (lstRegistrosLI,sMsgError) =False then 
        MessageBox.Show ("Ocurrió un error al generar el archivo para Decalog: " & sMsgError,"LoadInstrument: carga Decalog",MessageBoxButton.OK,MessageBoxImage.Error)
     else
         
          Try
            negocio.EjecutarProcesoLI() 
          Catch ex As Exception
                    MessageBox.Show("Error TI500. El archivo no pudo ser transmitido: " & ex.Message, "LoadInstrument: carga Decalog", MessageBoxButton.OK, MessageBoxImage.Error)
              Mouse.OverrideCursor =  Nothing 
              Exit sub
          End Try

         
                     
         MessageBox.Show ("Fin de Carga Decalog","LoadInstrument: carga Decalog",MessageBoxButton.OK,MessageBoxImage.Information)
     End If
 Else 
     MessageBox.Show ("No existe información a procesar","LoadInstrument: carga Decalog",MessageBoxButton.OK,MessageBoxImage.Information)
 End If


 Mouse.OverrideCursor =  Nothing 

End Sub

    Private Sub btnAgregarInstrumento_Click(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs) Handles btnAgregarInstrumento.Click                
      Try
         AgregarRegistroInstrumento ()
      Catch ex As Exception
         MessageBox.Show("Error TI500. " & ex.Message, "Insertar registro", MessageBoxButton.OK, MessageBoxImage.Exclamation)
      End Try
      
    End Sub

    Private Sub btnEliminaInstrumento_Click(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs) Handles btnEliminaInstrumento.Click

          Dim instrumentos As ObservableCollection(Of CTLoadInstrument) = grdDatosLI.ItemsSource
          Dim instEliminar As New ObservableCollection(Of CTLoadInstrument)
          Dim instAgregado As New CTLoadInstrument()
          Dim instRecorrido As New CTLoadInstrument()

        If grdDatosLI.SelectedCells.Count > 0 Then
            For Each celda As DataGridCellInfo In grdDatosLI.SelectedCells
                instEliminar.Add(CType(celda.Item, CTLoadInstrument))
            Next

            For Each T As CTLoadInstrument  In instEliminar 
                instrumentos.Remove(T)
            Next

            grdDatosLI.UpdateLayout()
        
        End If

        ValidaCantidadDatos()
    
    
    
    End Sub
    
    Private Sub btnInsertar_Click(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs) Handles btnInsertar.Click

     Dim msgBorrar As MessageBoxResult  

         '1. Limpiar registros
          If  grdDatosLI.Items.Count  > 0 then 

              msgBorrar = MessageBox.Show ("La infomación actual será eliminar, desea continuar con la inserción de datos","Insertar intrumentos",MessageBoxButton.OKCancel,MessageBoxImage.Question )  
              If msgBorrar = MessageBoxResult.Cancel then 
                 Exit sub
              End If
              
              Mouse.OverrideCursor =  Cursors.Wait  
              lstRegistrosLI.Clear 
              grdDatosLI.Items.Refresh  
              Mouse.OverrideCursor =  NOTHING
          End If
    
          Mouse.OverrideCursor =  Cursors.Wait  
          Try
             InertarRegistrosLI(grdDatosLI )
          Catch ex As Exception
               lstRegistrosLI.Clear 
               grdDatosLI.Items.Refresh  
              Mouse.OverrideCursor =  NOTHING
             MessageBox.Show (ex.Message,"Inserción de datos en LoadInstrument",MessageBoxButton.OK,MessageBoxImage.Exclamation)              
          End Try
           Mouse.OverrideCursor =  NOTHING      
    End Sub


    #Region "FUNCIONES RELACIONADAS"

    
         Private Function ObtenerCelda(ByRef miDataGrid As DataGrid, ByVal indexRow As Integer, ByVal indexCol As Integer) As DataGridCell
            Try
                Dim row As DataGridRow = miDataGrid.ItemContainerGenerator.ContainerFromIndex(indexRow)
                Dim cellContent As Object = miDataGrid.Columns(indexCol).GetCellContent(row)

                Dim objDepend As DependencyObject = cellContent
                Dim celda As DataGridCell = Nothing

                While Not objDepend Is Nothing

                    If objDepend.GetType().Name = "DataGridCell" Then
                        celda = objDepend
                        Return celda
                    End If
                    objDepend = VisualTreeHelper.GetParent(objDepend)
                End While
            Catch ex As Exception
                Throw ex
            End Try

            Return Nothing
        End Function

         Private Sub ValidaCantidadDatos()
            If grdDatosLI.Items.Count > 0 Then            
                btnEliminaInstrumento.IsEnabled = True
            Else
           
                btnEliminaInstrumento.IsEnabled = False
            End If
         End Sub

         Private Sub AgregarRegistroInstrumento()
            grdDatosLI.UnselectAllCells()
            grdDatosLI.UpdateLayout()


            If Not grdDatosLI.ItemsSource is Nothing then 
               lstRegistrosLI = grdDatosLI.ItemsSource
            End If

        
            lstRegistrosLI.Add(New CTLoadInstrument())

            grdDatosLI.ItemsSource = lstRegistrosLI 


            grdDatosLI.ScrollIntoView(grdDatosLI.Items(grdDatosLI.Items.Count - 1))
            grdDatosLI.UpdateLayout()

            Dim celda As DataGridCell = ObtenerCelda(grdDatosLI, grdDatosLI.Items.Count - 1, 0)
            If Not celda Is Nothing Then
                celda.Focus()
                grdDatosLI.BeginEdit()
                celda.IsSelected = True
            End If

            ValidaCantidadDatos()


    End Sub

         Private Sub InertarRegistrosLI(ByRef gridDeDatos As DataGrid)
  

            Dim datos As CDatosEnFormatoX
            Dim i As Integer = 0

            datos = CUtileria.ObtenerDatosClipboard(vblf, vbTab)

            '1) Validaciones: obtener información del portapapeles

            If datos.Datos.length = 0 Then
                Exit Sub
            End If


            If datos Is Nothing Then                        
                gridDeDatos.CancelEdit(DataGridEditingUnit.Cell)
                Throw New Exception ("TO500. No se pudo copiar los datos") 
                Exit Sub
            End If




            '2)  Generar Registros en el grid
          
              For i  = 1 to  datos.NumeroRenglones 
                 AgregarRegistroInstrumento()
              Next
         


            Dim colTot As Integer = 1   'Solo se considera el número de columnas editables   
            Dim rowTot As Integer = gridDeDatos.Items.Count


            Dim colActual As Integer 
            Dim rowActual As Integer 
       
            colActual = 0        
            rowActual = 0 'gridDeDatos.Items.IndexOf(CType(gridDeDatos.SelectedCells.First.Item, CTLoadInstrument))
        


            'Validar renglones

            If datos.NumeroRenglones > ((rowTot - (rowActual + 1)) + 1) Then
                Throw New Exception ("TO500. No coinciden las dimensiones de datos a pegar (R)")
                gridDeDatos.CancelEdit(DataGridEditingUnit.Cell)
                Exit Sub
            End If

            If datos.NumeroColumnas.Max > ((colTot - (colActual + 1)) + 1) Then
                 Throw New Exception ("TO500. No coinciden las dimensiones de datos a pegar (C)")
                 gridDeDatos.CancelEdit(DataGridEditingUnit.Cell)
                 Exit Sub
            End If

            '2) Realizar copiado  

            i = 0


            Dim coontador As Integer = 0

            Dim limRow As Integer = (rowActual + (datos.NumeroRenglones - 1))
            Dim limCol As Integer = (colActual + (datos.NumeroColumnas.Max - 1))


            gridDeDatos.UnselectAllCells()


            Try


                Dim j As Integer = 0
                For i = rowActual To limRow

                    Dim row As DataGridRow = gridDeDatos.ItemContainerGenerator.ContainerFromIndex(i)

                    For j = colActual To limCol
                        If datos.Datos(i - rowActual)(j - colActual) <> vbLf And (Not CType(datos.Datos(i - rowActual)(j - colActual), String).Trim().Equals("")) Then
                            Dim cellContent As Object  = gridDeDatos.Columns(j).GetCellContent(row)
                            lstRegistrosLI(i).P_0_instrument = datos.Datos(i - rowActual)(j - colActual).ToString.Trim()
                            cellContent.Text = datos.Datos(i - rowActual)(j - colActual).ToString.Trim()
                        End If
                    Next


                    Try
                        negocio.AplicarReglasNegocio(Me.dtpFecha.DisplayDate, lstRegistrosLI(i), dtCorporativo, dtGubernamental, dtBancario, dtNotas, dtVectorValmer,dtPosiciones )
                    Catch ex As Exception
                        LimpiarValorVisualDelRegistro(i)
                        lstRegistrosLI(i).limpiarValores()

                        If ex.Message.IndexOf("TO500") >= 0 then 
                           Throw New Exception(ex.Message)
                        else
                           Throw New Exception("Error TI500. Ocurrió un error: " & ex.Message & ".")
                        End If
                    
                        Exit Sub
                    End Try


                    ActualizarVisualizacionCampos(row, i)

                Next

                gridDeDatos.CancelEdit(DataGridEditingUnit.Cell)

            Catch ex As Exception
                gridDeDatos.CancelEdit(DataGridEditingUnit.Cell)
                Throw New Exception("TO500. No se pudo terminar de copiar los datos debido a que no coinciden con el formato especificado para cada celda", ex)
            End Try


    End Sub

    
     #End Region
     
#End Region

    #Region "ACTUALIZACIÓN DE PRECIOS"
  
    Private sub CargarInstrumentos()
        

         Dim lstInstrumentos As New List(Of CInstrumentosConsulta )
                
         lstInstrumentos =   negocio.ObtenerInstrumentosDecalog (Me.txtInstrumento.Text )       
         
         Me.lswInstrumentos.ItemsSource = lstInstrumentos
         Me.lswInstrumentos.Items.Refresh () 
          
         If lstInstrumentos.Count > 0 then 
            Me.lswInstrumentos.SelectedItem = Me.lswInstrumentos.Items (0)
            Me.lswInstrumentos.Focus ()
         End If

    End Sub

    Private Sub btnConsultarDecalog_Click(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs ) Handles btnConsultarDecalog.Click 
        CargarInstrumentos ()
    End Sub

    Private Sub lswInstrumentos_SelectionChanged(ByVal sender As System.Object , ByVal e As System.Windows.Controls.SelectionChangedEventArgs) Handles lswInstrumentos.SelectionChanged
        Dim item As CInstrumentosConsulta


          item  = TryCast (Me.lswInstrumentos.SelectedItem ,CInstrumentosConsulta)

          

          If Not item is Nothing then 
            Me.lblInstrumentoElegVal.text =  item.Instrumento
          Else
            Me.lblInstrumentoElegVal.text = ""
          End If

        

    End Sub

    Private Sub txtPrecio_TextChanged(ByVal sender As System.Object , ByVal e As System.Windows.Controls.TextChangedEventArgs) Handles txtPrecio.TextChanged
        Dim t As Controls.TextBox = sender
             Dim strFinal As String
    
             strFinal = t.Text    

             For Each aux As Char In t.Text
                 If (Not Char.IsNumber(CChar(aux))) AND (Not aux = "-") AND (Not aux = ".") Then
                     strFinal = t.Text.Replace(aux, "")
                 End If                
             Next             

            txtPrecio.Text =    strFinal 
            If Not IsNumeric(strFinal) then 
               txtPrecio.Foreground = Brushes.Red   
            Else
               txtPrecio.Foreground = Brushes.Black    
            End If
            
                
    End Sub

    Private Sub btnCargarPrecio_Click(ByVal sender As System.Object , ByVal e As System.Windows.RoutedEventArgs ) Handles btnCargarPrecio.Click 
                                                                                                                                           
Mouse.OverrideCursor =  Cursors.Wait 


  Try
  
       If not IsNumeric (lblPrecioElegVal.Text ) then 
          MessageBox.Show ("El precio instroducido es incorrecto","Carga de precio negativo", MessageBoxButton.OK,MessageBoxImage.Error)
          Mouse.OverrideCursor =  Nothing 
          Exit Sub 
       End If

  
       Dim instrumento As String  = lblInstrumentoElegVal.Text  
       Dim fecha       As Date = dtpFechaPrecNega.SelectedDate         
       Dim precio      As Double  = Convert.ToDouble (lblPrecioElegVal.Text ) 

       Dim sMsgError   As String = ""


       If negocio.GenerarArchivoPrecioNegativo (instrumento,fecha, precio,sMsgError ) then 
           
          
            negocio.EjecutarProcesoLI() 
         

          MessageBox.Show ("Precio enviado a Decalog","Carga de precio negativo", MessageBoxButton.OK,MessageBoxImage.Information)

       Else 
           MessageBox.Show ("Ocurrió un error al generar el archivo: " & sMsgError ,"Carga de precio negativo", MessageBoxButton.OK,MessageBoxImage.Error)
           Mouse.OverrideCursor =  Nothing 
           Exit Sub 
       End If



  Catch ex As Exception
            MessageBox.Show("Error TI500. Ocurrió un error al generar el archivo o al transmitirlo  a Decalog: " & ex.Message, "Carga de precio negativo", MessageBoxButton.OK, MessageBoxImage.Error)
     Mouse.OverrideCursor =  Nothing 
     Exit Sub
  End Try

  Mouse.OverrideCursor =  Nothing 

End Sub


#End Region


End Class
